我第一次遇到的時候是因為要讀取某個文件,而該文件裡面只有一個數字,而我就是要拿那個數字來和其他的數字作比較。但不知道為什麼,察看了半天,我的 script 並沒有錯阿,後來利用 set –xv 才發現,怎麼那文件裡的數字後面多了些奇怪的東西。
在 linux 下使用 script 來操作文件時,以我的經驗來說最常遇到的問題的就是『換行』問題。我第一次遇到的時候,還真的一頭霧水,搞了很久才發現原來是換行出了問題。而這個問題,如果沒經驗,有的時候還真的不知道改怎麼解,所以我就在這邊把這個問題給提了出來。
我第一次遇到的時候是因為要讀取某個文件,而該文件裡面只有一個數字,而我就是要拿那個數字來和其他的數字作比較。但不知道為什麼,察看了半天,我的 script 並沒有錯阿,後來利用 set –xv 才發現,怎麼那文件裡的數字後面多了些奇怪的東西。
歷史
在最早已前,電傳打字機是最常見的輸出設備,而這種設備如果要列印文件,就是會由一邊印到另外一邊,接著再把印字頭回車 (Carrage) 到原本那一邊。然而讓印字頭做這個動作就必須要輸出一個指令 \r(=0x0D),可是這樣還是不夠,如果只有這樣,印字頭就會繼續打印在剛剛已經打印過的那行上面,所以必須要輸出一個指令使紙張上移一行,這個指令就是 \n(=0x=A)。
後來 Unix 這種作業系統將這個動作簡化成 \n,但是其他的作業系統,如DOS仍然使用 \r\n 作為末行的約定。
結果
所以我那時候遇到的就是這個問題: “\n” 和 “\r\n”。
所以如果遇到檔案結尾多出一個 ^M,這時候就可以使用 script 將這個符號給去除,再進行操作就不會遇到一些奇奇怪怪的問題了。
但是要注意喔,^M 不是輸入 ^ 和 M 喔,是要用 Ctrl+V, Ctrl+M 產生的才會有效。
Ctrl+V, Ctrl+M 所產生的 ^M 在 eclipse 或 gpedit 下並看不見,會被當成換行,只有在 vim 下才看得見。(註:應該也有別的編輯器可以看見,只是我的經驗只有在 vim 下才看得見)
所以,你也可以用 \r$ 取代 ^M 來使用。
鐵人賽文章分享
上一篇 除了互動以外的輸入方式
下一篇 取得執行命令的結果